﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using Misuzilla.Net.Irc;

namespace Misuzilla.Crigate
{
    /// <summary>
    /// IRCメッセージ受信時イベントのデータを提供します。
    /// </summary>
    [Serializable]
    public class MessageReceivedEventArgs : CancelableEventArgs
    {
        /// <summary>
        /// 受信したIRCメッセージを取得します
        /// </summary>
        public IrcMessage Message { get; set; }

        public MessageReceivedEventArgs(IrcMessage msg)
        {
            Message = msg;
        }
    }

    /// <summary>
    /// IRCメッセージ受信時イベントのデータを提供します。
    /// </summary>
    [Serializable]
    public class MessageReceivedEventArgs<T> : MessageReceivedEventArgs where T : IrcMessage
    {
        /// <summary>
        /// 受信したIRCメッセージを取得します
        /// </summary>
        public new T Message { get { return base.Message as T; } set { base.Message = value; } }

        public MessageReceivedEventArgs(T msg) : base(msg)
        {
        }
    }

    /// <summary>
    /// セッションが開始時イベントのデータを提供します。
    /// </summary>
    public class SessionStartedEventArgs : EventArgs
    {
        /// <summary>
        /// 接続してきたユーザの名前を取得します。
        /// </summary>
        public String UserName { get; private set; }
        public SessionStartedEventArgs(String userName)
        {
            UserName = userName;
        }
    }

    /// <summary>
    /// キャンセル可能なイベントのデータを提供します。
    /// </summary>
    [Serializable]
    public abstract class CancelableEventArgs : EventArgs
    {
        /// <summary>
        /// 処理をキャンセルするかどうかを取得・設定します
        /// </summary>
        public Boolean Cancel { get; set; }
    }
}
